<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <link href="../css/style.css" rel="stylesheet" type="text/css">
</head><body>
<h1>Регистры процессора</h1>
<p class="article">
Микропроцессор 8086 имеет 12 программно-доступных шестнадцатиразрядных 
регистров, регистр счетчика команд IP (Instruction Pointer) и регистр флагов 
(или регистр состояния процессора) FLAGS.
Среди программно-доступных регистров выделяют следующие группы:
</p>
<ul>
	<li class="article list">Регистры данных: AX – аккумулятор (Accumulator); BX - базовый регистр 
	(Base); CX - регистр счетчика (Counter); DX - регистр данных (Data).</li>
	<li class="article list">Регистры-указатели (индексные регистры): SI - индекс источника 
	(Source Index); DI - индекс приемника (Destination Index); BP - указатель 
	базы (Base Pointer); SP - указатель стека (Stack Pointer).</li>
	<li class="article list">Сегментные регистры: SS - сегмент стека (Stack Segment); DS - сегмент 
	данных (Data Segment); ES - дополнительный сегмент (Extended data Segment); 
	CS – сегмент кода (Code Segment).</li>
</ul>
<p class="article">
16-битные регистры AX, BX, CX, DX состоят из двух 8-битных половин, к которым 
можно независимо обращаться по именам AH, BH, CH, DH - старшие байты и AL, BL, 
CL, DL - младшие байты.
</p>
<div class="image">
	<img src="../img/reg_proc_8086.png" />
	<p>Регистры процессора 8086</p>
</div>
<p class="article">
Биты (или флаги) регистра признаков FLAGS разделяются на условные, отражающие 
результат предыдущей операции ALU, и управляющие, от которых зависит выполнение 
специальных функций.
</p>
<div class="image">
	<img src="../img/cpu_flags.png" />
	<p>Регистр флагов процессора 8086</p>
</div>
<p class="article">
Флаги TF, IF, DF относятся к управляющим флагам, остальные - к условным 
(флагам состояния). Флаги отражают следующие условия:
</p>
<ul>
	<li class="article list">флаг переноса CF устанавливается в 1 при переносе/
	заеме, возникающем при сложении/вычитании байтов или слов, а также принимает 
	значение выдвигаемого бита при сдвигах операнда;</li>
	<li class="article list">флаг четности PF устанавливается в 1, если младшие 
	8 бит результата имеют четное число единиц;</li>
	<li class="article list">флаг вспомогательного переноса AF устанавливается 
	в 1, если есть перенос/заем из младшей тетрады в старшую 8- или 16-битного 
	результата в операциях десятичного сложения/вычитания;</li>
	<li class="article list">флаг нуля ZF устанавливается в 1 при нулевом результате операции;</li>
	<li class="article list">флаг знака SF устанавливается в 1 при отрицательном результате
операции при использовании дополнительного кода;</li>
	<li class="article list">флаг переполнения OF устанавливается в 1 при потере старшего
бита результата сложения или вычитания;</li>
	<li class="article list">если флаг направления DF установлен в 1, то 
	используется автодекрементная адресация при выполнении операции обработки 
	строк, если DF установлен в 0, то используется автоинкрементная адресация;</li>
	<li class="article list">если флаг прерывания IF установлен в 1, то внешние 
	маскируемые прерывания разрешены, иначе запрещены;</li>
	<li class="article list">если флаг трассировки TF установлен в 1, то 
	процессор переходит в состояние прерывания после выполнения каждой операции, 
	что позволяет проводить пошаговую отладку программ.</li>
</ul>
</body></html>
